アルゴリズム メモ (CrossFindClass)
b1 => { b1, b2 }
a1 => { a1, a2 }, { a1, b1 }
b1 => { b1, b2 }, { a1, b1 }
{ a1, b1 }
候補を絞っていく
候補がなくなったら、Module を追加する(A1.xml)か、
Element を追加する(A3.xml)か、どっち?
{ a1, b1 } をすべて(a1, b1)に追加する
a1 => { a1, a2 }
a2 => { a1, a2 }
a3 =>
{ a1, a2, a3 }
{ a1, a2, a3 }
{ a1, a2, a3 }
a3 に 全ての要素 { a1, a2, a3 } を追加
a3 を除いた { a1, a2 } を変更する
{ a1, b1 }
a1 => { a1, a2 }
{ a1, b1 }
(すべての)新規 (a3) を除いたモジュールがあれば、
要素すべて(a1 と b1)が既存なので
(既存の異なる2つのモジュールをクロスするので)
すべての要素を含むモジュールを見つける
=> { a1, a2 }, { a1, b1 }
=> { a1, b1 }
a3 を除いたのが { a1, b1 } でないときは、すべて追加する
a1 => { a1, a2 }
a2 => { a1, a2 }
a3 =>
新規 (a3) を除いたのが一部のときは、
({ a1, a3 } については、)
Module を追加する
{ a1, a3 }
{ a1, a3 }